プログラミングやRPG(作るほう)が好きな人の日記
このホームページは毎日 夜11時にアクセスできなくなります。 朝6時半に再開されます。(世の中のネット依存対策として) 「homepage6047.sakura.ne.jp」は近々、「web6047.sakura.ne.jp」に変更予定です。 |
以下2点のサウンドトラックを購入することができました。ほんとに良かった。
どちらも中古ショップではプレミア価格が付いていて高額で買えないな…と思っていましたが、正規販売のほうで名作CDコーナーと題して、普通の価格で再販してくれています。
セガストア、「DAYTONA USA」など名作ゲームのサントラCDをピックアップしたコーナー「セガ名作サントラCD」をオープン!
また こりずに仕事しすぎて疲れていたけど、なんだか元気が出てきちゃった☆彡
(訪問者のどんなニーズと この記事がつながるか)
お盆を前にして、精霊馬(しょうりょう うま)が頭にあって用意しようと思っていました。
ナスやキュウリに、棒を4つ、足のように突き刺して動物のようにした人形です。
「めぞん一刻」というマンガの扉絵だったかで描かれていたのを見たことがあります。
お盆には亡くなったご先祖さんたちが家にやってくるんですが、そのときの乗り物として「馬」や「牛」を用意してあげる、という意味だそうです。
近所のスーパーで「お供え物」として500円くらいでセットが売っていたので買ってきました。
足は付けなかったんですが、母が言うには お盆のお供え物は「亡くなった親せきが喜ぶ」のだそうです。
左の画像リンクをクリックすると 画像を拡大 します。
しかし、いつまでも飾っていると傷んでしまうので3~4日たったころに捨てることにしました。でも そのまえに、ほおずきだけ…。
パカッと開けると、中に丸い実が。ひさしぶりだなぁ。
左の画像リンクをクリックすると 画像を拡大 します。
(訪問者のどんなニーズと この記事がつながるか)
7/13(土)に秋葉原へ出かけて買ってきた、子供向けのプログラミング教育用 基板「IchigoCake」。
私が購入したのは「組み立てキット」というタイプで、自分でマイコンにシステムを書き込むという作業が必要、というものでした。
ところが、書き込むための「USB-シリアル変換」というパーツを買い忘れていました。
そこで自室に置いてあった「USB-シリアル変換ケーブル」というケーブルを使って書き込もうとしましたが、同じシリアルでも RS-232c というタイプのシリアル通信だったため、信号電圧 5V までの「IchigoCake」基板に 12V の信号を流してしまったのでした。記事
その後…。
秋月通販にアクセスして購入した「超小型USBシリアル変換モジュール」。届きました。
左の画像リンクをクリックすると 画像を拡大 します。
これを使って書き込むマイコンは、「IchigoCake BASIC」と「PanCake」の2つです。
左の写真は「IchigoCake BASIC」の書き込み。
ちゃんと書き込みできました。
左の画像リンクをクリックすると 画像を拡大 します。
左の写真は「PanCake」の書き込み。
こちらもちゃんと書き込みできました。
左の画像リンクをクリックすると 画像を拡大 します。
書き込みはできましたが、12V のダメージを受けているので起動するかは まだわかりません。
起動しました。あっさり。
映像出力は2つあって、左の写真は「プログラミング画面」です。
たぶん2つのマイコンのうち「IchigoCake BASIC」のほうの画面がこれです。
左の画像リンクをクリックすると 画像を拡大 します。
左の写真は「実行画面」、2つのマイコンのうち「PanCake」のほうの画面です。
でも画面全体が灰色(モノクロ)です。
左の画像リンクをクリックすると 画像を拡大 します。
説明書に
「C11: PanCakeの映像調整に使います。起動時に画面がカラーにならない場合、内部を精密ドライバーなどで回して調整してください」
と書いてあります。
左の画像リンクをクリックすると 画像を拡大 します。
それで回してみると、カラーになりました。めでたし。
左の画像リンクをクリックすると 画像を拡大 します。
プログラムを打ち込んでみました。
左の画像リンクをクリックすると 画像を拡大 します。
RUN すると打ち込んだプログラムのとおりに「PanCake」のほうで動きます。
2つのマイコンは2つとも LPC1114FHN33/333(ARM Cortex-M0搭載、50MHz)という高性能マイコンです。(データシート 英語 PDF)
ですが、言語が BASIC なので、動きは多少もたつくようです。アセンブラで動かせば速いはずです。
左の画像リンクをクリックすると 画像を拡大 します。
それから、スプライト機能の描画の様子を見てみました。
▼スプライトの動き 横8 x 縦4 = 32個 のスプライトを一斉に動かすと、少し遅延はあるけど、ちょっと遊ぶには問題なさそう。 遅延があるところはソフトウェアっぽい動きですね。 遅延はたぶん BASIC だからで、アセンブラ(機械語)でプログラムすればもっと速いかもしれません。 |
▼スプライトの書き換え こちらも、横8 x 縦4 = 32個 のスプライトで、今度はパターンの書き換えを行ってみました。 32個のスプライトは、同じパターンを参照していて、そのパターン1つを書き換えると、ほぼ同時にすべてのスプライトが変化しています。 遅延がないというのはハードウェアっぽい動きですね。 |
1 'SPRITE TEST 200 PC.RESET:WAIT5 210 PC.WBUF 1 220 PC.SSTART 1 225 FOR I=0 TO 31 230 PC.SCREATE I,I 300 NEXT 305 A=0:B=1 310 FOR I=0 TO 31 320 PC.SMOVE I,I%8*8+A,(I-I%8) 330 NEXT 340 A=A+B 350 IF A=3 B=-1 360 IF A=-3 B=1 370 GOTO 310 |
50 'スプライト カキカエ テスト 100 'モジレツ メモリ カクホ 110 A="11111111111111111111111111111111 11111111111111111111111111111111" 120 ' 130 'ショキカ 140 FOR I=0 TO 63 150 POKE A+I,ASC("2") 160 NEXT 170 ' 180 PC.SSTART #10 190 ' 200 'スプライト サクセイ 210 FOR I=0 TO 31 220 PC.SCREATE I,#F0 230 NEXT 240 ' 250 'アニメ 260 FOR I=0 TO 63 270 POKE A+I,ASC("1") 280 PC.SUSER #F0,2,A 290 NEXT 300 GOTO 110 |
ちょっと驚いたのは、「メモリを書き換える」という命令を使って、ある文字列変数の内容を書き換えたとき、「プログラムリスト」の代入部分(文字列)が書き換わったことでした。
たしかにそこを書き換えればメモリの節約になる気がしますけど、びっくりしました。
でもこれって、プログラムをソフトウェアとして動かすときの発想ではなくて、プログラムを機械の一部として動かすときの発想に似ているなと思いました。IchigoJam や IchigoCake を作った人はそういう感覚を持っている人なのかもしれません。
私も小さい頃は、↓こういう画面で遊んでいたので、最近の子供たちも同じように遊べるだろうなと思いました。
秋月電子通商で購入した小さいモニタは「IchigoCake」専用ではなく、普通のビデオ入力のモニタなので、ファミコンの画面も映せるでしょう。
そこで、ファミコン互換機を小さいモニタにつなげて、ドラクエで遊んでみました。
モニタの背面のボタンで色調整や画面縦横比率変更などを行いました。
ビデオ入力らしい多少にじみのある映像です。
音声入力はないので別途スピーカーから音を出す必要があります。
左の画像リンクをクリックすると 画像を拡大 します。
(訪問者のどんなニーズと この記事がつながるか)
最近不健康なので、 8/7(水)~ お盆休み最終日 8/18(日)まで、NO PC WEEK にします。
そのあいだホームページの更新は行われませんのでお知らせしておきます。
前回 NO PC WEEK を行ったときは、だいぶ良くて自分で絶賛していました。
パソコンをやらないというだけで、身体の状態が良くなり、気持ちも晴れやかになります。
応用情報の資格試験受験の申込みをしました。
お盆休み中は SQL とアセンブラに まとをしぼって取り組みたいと思います。
合格したいという気持ちはゼロではありませんが、合格よりも、SQL の問題を自信をもって解けるようになりたいという気持ちがあります。
応用情報は3度くらい受験していますが、毎回 SQL は自信がないんです。
アセンブラは応用情報の勉強にはあまり効果がない気がしますが、アセンブラは前のゴールデンウィークに勉強したものの いまいち身についている気がしないので復習でもう一度 本を最初から読み進めたいと思っています。
応用情報の資格を取っても、その方向の就職をするつもりはなく、単に自己啓発を目的にして取り組もうと思っています。
私の身体はけっこうボロボロになっている気がしますが(仕事のしすぎで。)、身体がボロボロだから向上心がなくなるとか何かをあきらめるとかそういうことにはならないみたいです。(今よりもっとボロボロになったらあきらめるんですかね?)
みなさんも、お盆休みに暇ならば、前から取り組もうと思っていたものを根詰めて勉強してみるとか、絵の苦手なところの練習とかでもいいと思うんですが、何かしらやってみてはどうでしょう。
(訪問者のどんなニーズと この記事がつながるか)
Shade3D で作成しました。
このような CG を作る過程をちょっと見てみましょう。
ステップは 1 ~ 12 まであります。
1. 直方体などで人体を かたちづくり…
左の画像リンクをクリックすると 画像を拡大 します。
2. そこへボーンと言われる骨組みを、だいたいこの辺かなというあいまいさで良いので、人の体の関節に合わせて配置します。
左の画像リンクをクリックすると 画像を拡大 します。
この作業をボーン(関節)の数だけ行います。
※図では、赤枠も青枠も名前が「むね」になっていますが、赤枠は「人の体のパーツの"むね"」、青枠は「ボーンの"むね"」です。私が同じ名前にしたので まぎらわしくなりました。
4. すると、ガンダムのプラモデルみたいに自在にポーズを付けることができるようになります。
左の画像リンクをクリックすると 画像を拡大 します。
5. ポーズの付け方は、
左の画像リンクをクリックすると 画像を拡大 します。
6. つづいて、フォトリアルにするために、
背景として プリセットの風景画像を適当に選びます。すると、
左の画像リンクをクリックすると 画像を拡大 します。
7. ここにセットされます。
左の画像リンクをクリックすると 画像を拡大 します。
8. そのままレンダリングすると、ただのレイトレーシングの質感になりますが…
左の画像リンクをクリックすると 画像を拡大 します。
9. レンダリングの設定で「大域照明」を「なし」から「パストレーシング」に切り替えると…
左の画像リンクをクリックすると 画像を拡大 します。
10. フォトリアルな質感になります。
ただし、赤枠部分に、余計な光源が設定されていて、この結果は本来よりも明るすぎになっています。
左の画像リンクをクリックすると 画像を拡大 します。
11. 赤枠部分を 0 に設定すると、
暗くなってしまいますが…
左の画像リンクをクリックすると 画像を拡大 します。
12. セットした背景について、「光源としての明るさ」という設定を 1.00 から今回は 3.00 にしました。
すると明るさを数値に合わせて増幅してくれるので、明るくなります。
これで、背景画像だけを光源としたフォトリアルなレンダリングとなりました。
左の画像リンクをクリックすると 画像を拡大 します。
(訪問者のどんなニーズと この記事がつながるか)
35年前にファミコンのドラゴンクエスト1でショックを受けて以来、ずっと RPG の自作に取り組んでいます。
35年前にポケコンの小さな画面で 1 作完成し、その後35年のあいだ、RPG の歴史を調べたり、すべての RPG の始祖の RPG を購入して研究したり、ゲームが社会に与える影響を考慮したり、この RPG はなぜおもしろいのか、なぜつまらないのか答えを探る等、いろいろ研究してきました。
そのあいだ、何も完成できないでいましたが、最近になって 2 作目に近づいてきました。
RPG の良さはいろいろあると思いますがその中に「現実でできないことの疑似体験ができる」というのがあると思います。魔法を使う、神話のモンスターと対峙する、姫を助け出す、知らない土地を歩く、などなど。
使ったことのない魔法を、自分で選んで発動し、その結果を見ることができるんです。
昨今のいろいろな RPG をやりすぎて、そういった初心を忘れていませんか?
左の画像リンクをクリックすると 画像を拡大 します。
(画像は Shade3D で作成、炎は無料素材から)
そこで今回の RPG の試作品です。
魔法を使う喜びを、と思ってそれを具現しようと試みました。
魔法はマップ上の一番左下に置いてあります。
魔法を使う意味のために、HP(体力)の概念を導入しました。敵キャラは HP が0になると撃破となります。自分の HP 表示は表示してるだけで自分が撃破されることはありません。
キーボード操作が必要です。
操作方法:
↑ ↓ ← → キー: 移動
EnterまたはSPACEキー: メッセージを送ったり、選択を決定。
左の画像リンクをクリックすると JavaScript を実行 します。
昨今の RPG では、魔法のグラフィカルなエフェクトが豪華です。
でも、敵キャラを刃で切りつけたり、敵キャラを炎で燃やす映像は、社会に対する影響としてよくないです。
ゲーム中の現実に近い描写を繰り返し見て体験することによって感覚として慣れてしまい、誰かを憎んだときの仕返しの手段として発想しやすくなってしまうでしょう。
ゲームは、悪いことをするための事前の訓練、そのためのリアルなシミュレーターに なってはいけないはずです。
その対策として、刃を振り上げるところまではふつうに描き、振り下げて切りつけるところで、その刃が透明になり、切りつけ終わると刃がまた現れる というのを、私は将来やろうと思っています。
1. 刃を振り上げるところまではふつう
|
2. 振り下げて切りつけるところで その刃が透明になり | 3. 切りつけ終わると刃がまた現れる |
そうすることで、感覚として慣れることはないだろうし、「相手を切りつけるのはいけないことである」というのを教えることもできると思います。
そのため、今回の試作品では、魔法で敵を炎で燃やす描写を避けました。
その代わり、メニューで「たたかう」にカーソルを合わせると武器を構え、「まほう」にカーソルを合わせると手のひらから "エネルギー体" が出ているところを表示するようにしました。
こうすることで、何をやろうとしているのかがよくわかるので、魔法を使う喜び、疑似体験につながるのではと思います。
今回の試作を通して、現実でできないことをゲームで実現できる、というのは、社会問題と隣り合わせなんだなと思いました。
(最近流行りの VR ゴーグルによる仮想世界体験はコンテンツの取捨選択が必要だと思います)
※ Internet Explorer は最近の新しいプログラム命令(async, await, Promise)に対応していないので動作しません。
プログラムは 前回に増して あまりきれいじゃありませんが…ダウンロードだけできるようにしておきます。
公開日 | ファイル名 | サイズ |
---|---|---|
2019/8/4 | 20190804-RPG test.zip | 444KB |
RPG 試作プログラム(JavaScript)の一式をまとめた ZIP ファイルです。
|
ダウンロード |
(訪問者のどんなニーズと この記事がつながるか)
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>